<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-kerberos-android-gssapi.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:24:32 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8" /><!-- /Added by HTTrack -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Generator" content="iWeb 3.0.4"/>
<meta name="iWeb-Build" content="local-build-20170103"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="viewport" content="width=770"/>
<title>wolfSSL - Docs | MIT Kerberos Java GSS-API</title>
<link rel="stylesheet" type="text/css" media="screen,print" href="Docs-kerberos-android-gssapi_files/Docs-kerberos-android-gssapi.css"/>
<!--[if lt IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Docs-kerberos-android-gssapi_files/Docs-kerberos-android-gssapiIE.css'/><![endif]-->
<!--[if gte IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Media/IE8.css'/><![endif]-->
<script type="text/javascript" src="Scripts/iWebSite.js"></script>
<script type="text/javascript" src="Docs-kerberos-android-gssapi_files/Docs-kerberos-android-gssapi.js"></script>
<meta name="description" content="This package provides a Java GSS-API wrapper around the MIT Kerberos libraries.  It was created for use on the Android platform with Android NDK applications."/><meta name="keywords" content="embedded ssl, ssl library, embedded web server, openssl alternative, openssl replacement, cyassl, stream ciphers ssl, aes-ni ssl, dtls, mysql ssl, portable ssl, ssl portable, portable tls, small openssl, smart grid, connected home, ecc, lightweight ssl, suite b, encryption security software, ssl inspection"/><meta name="robots" content="follow,index"/> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','../../www.google-analytics.com/analytics.js','ga');ga('create','UA-64826966-1','auto');ga('send','pageview');</script>
 
<script>//<![CDATA[
window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("../../assets.zendesk.com/embeddable_framework/main.js","wolfssl.zendesk.com");
//]]></script>
  </head>
<body style="background: rgb(255, 255, 255); margin: 0pt; " onload="onPageLoad();">
<div style="text-align: center; ">
<div style="margin-bottom: 20px; margin-left: auto; margin-right: auto; margin-top: 20px; overflow: hidden; position: relative; word-wrap: break-word;  background: rgb(255, 255, 255); text-align: left; width: 770px; " id="body_content">
<div style="float: left; margin-left: 0px; position: relative; width: 770px; z-index: 0; " id="nav_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div style="clear: both; height: 0px; line-height: 0px; " class="spacer"> </div>
</div>
<div style="float: left; height: 0px; line-height: 0px; margin-left: 0px; position: relative; width: 770px; z-index: 10; " id="header_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
</div>
<div style="margin-left: 0px; position: relative; width: 770px; z-index: 5; " id="body_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div id="id1" style="height: 38px; left: 375px; position: absolute; top: 157px; width: 361px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_361_38" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style">MIT Kerberos: Java GSS-API Wrapper</p>
</div>
</div>
</div>
<div id="id2" style="height: 8343px; left: 35px; position: absolute; top: 251px; width: 701px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_701_8343" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-top: 0pt; " class="paragraph_style_1">Introduction<span class="style"><br/></span></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">This package (see link below) provides a Java GSS-API wrapper around the the MIT Kerberos GSS-API native library. This wrapper conforms to the GSS-API Java bindings via RFC 5653. One of the main goals of this project is to bring GSS-API functionality to the Android platform, which previous to this project lacked both Kerberos and GSS-API support. Using this project, Android developers are able to use GSS-API functionality in their Android NDK applications.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">For a working example of an Android NDK application using this Java GSS-API interface, please reference the &quot;Kerberos Android NDK&quot; project hosted on GitHub: <a title="https://github.com/cconlon/kerberos-android-ndk" href="https://github.com/cconlon/kerberos-android-ndk">https://github.com/cconlon/kerberos-android-ndk</a>. This project provides a sample Android NDK application showing how to use MIT Kerberos and GSS-API functionality in an Android application.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_3">Table of Contents<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_4">1.  Requirements<br/></p>
<p class="paragraph_style_5">2.  Project Design<br/></p>
<p class="paragraph_style_2">     a.  Project Contents<br/></p>
<p class="paragraph_style_5">3.  Building<br/></p>
<p class="paragraph_style_2">     a.  Desktop Environment<br/></p>
<p class="paragraph_style_2">     b.  Android NDK Environment<br/></p>
<p class="paragraph_style_5">4.  Examples<br/></p>
<p class="paragraph_style_2">     a.  Client Examples<br/></p>
<p class="paragraph_style_2">     b.  Server Examples<br/></p>
<p class="paragraph_style_5">5.  Notes<br/></p>
<p class="paragraph_style_5">6.  SWIG Interface Details<br/></p>
<p class="paragraph_style_5">7.  Java GSS-API Details (org.ietf.jgss)<br/></p>
<p class="paragraph_style_5">8.  License<br/></p>
<p class="paragraph_style_5">9.  Support<br/></p>
<p class="paragraph_style_5">10.  References<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_3">1. Requirements<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">You must have SWIG installed on your development machine in order to build this GSS-API wrapper. The Java GSS-API bindings are wrapped around a native SWIG-generated layer that then in turn interfaces to the native Kerberos GSS-API library. To download and install SWIG, please see the project homepage at <a title="http://www.swig.org/" href="http://www.swig.org/">http://www.swig.org/</a>. This project has been developed using SWIG version 1.3.40 running on Linux.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">To use this interface in your Android NDK application, you need to include cross-compiled versions of the MIT Kerberos libraries for Android in your project. For details about these libraries and an example of how to include them in your project, please see the &quot;Kerberos Android NDK&quot; application on GitHub: <a title="https://github.com/cconlon/kerberos-android-ndk" href="https://github.com/cconlon/kerberos-android-ndk">https://github.com/cconlon/kerberos-android-ndk</a> for both pre-compiled libraries and instruction on how to compile them manually.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">If you want to rebuild the pre-built Kerberos libraries, please use the android-config.sh shell script found in the above noted project. This will setup the correct autoconf environment for the MIT Kerberos libraries to be cross-compiled for the Android platform. More detailed instructions can be found in the script comments.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The development machine must also have a working Java implementation installed in order to compile the source and examples.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_3">2. Project Design<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">This project is composed of several layers - most of which are invisible to the end Java API user. The individual layers are visualized in the following figure. The native MIT GSS-API library is first wrapped using SWIG to form a temporary C/Java layer (LAYER 1). This first layer may be used directly, but is more tedious and less standardized than the org.ietf.jgss interface. A top-level Java API is then wrapped around the SWIG-generated layer. This top-level Java API (LAYER 2) conforms to the org.ietf.jgss interface specification. The interface is located in the org.ietf.jgss package while the implementation is located in the edu.mit.jgss package.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2"><span class="style_1">Layer 2</span>: Java GSS-API interface (org.ietf.jgss, edu.mit.jgss)<br/></p>
<p class="paragraph_style_2">             |-----&gt;<span class="style_1"> Layer 1</span>: SWIG-generated interface layer handling C-Java interaction<br/></p>
<p class="paragraph_style_2">               |-----&gt; Native MIT Kerberos/GSS-API libraries<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">2.1. Package Contents<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">A short description of the main file and directory structures in this package are below.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">gsswrapper.i<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">This is the SWIG interface file. It contains all of the code and typemaps <br/></p>
<p class="paragraph_style_2">needed by SWIG to generate the corresponding &quot;LAYER 1&quot; Java interface for the <br/></p>
<p class="paragraph_style_2">MIT GSS-API library. <br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">gsswrapper_wrap.h<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">This is a header file that contains function prototypes for the SWIG-generated <br/></p>
<p class="paragraph_style_2">C wrapper functions. If functions are changed in gsswrapper.i, this file <br/></p>
<p class="paragraph_style_2">should be updated to match accordingly.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">src/java/edu/mit/jgss/swig<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Location of the SWIG-generated .java files which provide &quot;LAYER 1&quot; Java access <br/></p>
<p class="paragraph_style_2">to the native MIT GSS-API library using a similar interface to GSS-API C <br/></p>
<p class="paragraph_style_2">bindings.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">src/java/edu/mit/jgss<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Location of the &quot;LAYER 2&quot; MIT Java GSS-API implementation of RFC 5653.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">src/java/org/ietf/jgss<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Location of the Layer 2 Java GSS-API interface files as outlined in RFC 5653.<br/></p>
<p class="paragraph_style_7"><br/></p>
<p class="paragraph_style_8">3. Building<br/></p>
<p class="paragraph_style_7"><br/></p>
<p class="paragraph_style_7">The Java GSS-API interface can currently be built for use on a standard desktop environment, or integrated into an Android NDK project.<br/></p>
<p class="paragraph_style_7"><br/></p>
<p class="paragraph_style_6">3.1 Desktop Environment<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">To build the GSS-API interface and examples on a desktop environment, <br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Change directory (cd) to the root package directory and edit the JavaBuild.sh file to match your system's Java and Kerberos configuration. <br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>NOTE: If building on OS X, the Java include directory will most likely be something similar to:<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>For OS X, you'll also need to change the extension of the shared library being compiled by SWIG to .dylib (libgsswrapper.dylib) instead of .so which is used by standard Linux environments.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>If building on Linux, the Java include directory may be similar to:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>/usr/lib/jvm/java-6-openjdk/include<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Verify that the library being loaded by the SWIG wrapper (gsswrapper.i) is the correct one. This should be the name of the library being created by the JavaBuild.sh script.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_13"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Run ./JavaBuild.sh<br/></p>
</li>
</ol>
<p class="paragraph_style_2">    <br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>This will run the correct SWIG command, create libgsswrapper.so (.dylib) as well as generate and compile all the necessary JNI and Java files needed for the interface and examples.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="4">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">4.</span><span style="width: 5px; " class="inline-block"></span>You may need to set <span class="style_1">LD_LIBRARY_PATH</span> to include paths to the MIT Kerberos libraries on your system as well as the location of the SWIG-generated library. For example, something similar to:<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>Linux:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>/home/myuser/kerberos-java-gssapi/<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>Mac:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/lib:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>/Users/myuser/kerberos-java-gssapi/<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="5">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">5.</span><span style="width: 5px; " class="inline-block"></span>Build the .java source files using the ant build system with the following command (issued from the package root directory). Compiled .class files will be placed into the ./build and ./examples/build directories.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>ant<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="6">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">6.</span><span style="width: 5px; " class="inline-block"></span>To easily clean up the package and return it to its original state, run the following commands from the package root directory. This will delete all compiled Java source files and the SWIG-generated .java files located in src/java/edu/mit/jgss/swig and native/.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>ant clean<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>ant cleanswig<br/></p>
</li>
</ol>
<p class="paragraph_style_6"><br/></p>
<p class="paragraph_style_6">3.2 Android NDK Environment<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">These instructions assume that you already have an Android NDK application created - or at least the directory structure of the application setup.<br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Copy both gsswrapper.i and gsswrapper_wrap.h into your project's 'jni' directory.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Create the following directory structures under your NDK application project root directory:<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>src/edu/mit/jgss<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>src/edu/mit/jgss/swig<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>src/org/ietf/jgss<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Copy the contents of the following src/java folders to their equivalent in your Android NDK application:<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>src/java/edu/mit/jgss -&gt; src/edu/mit/jgss<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>src/java/org/ietf/jgss -&gt; src/org/ietf/jgss<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>These folders contain the Java GSS-API (LAYER 2) interface.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="4">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">4.</span><span style="width: 5px; " class="inline-block"></span>If needed, verify that the library being loaded by the SWIG wrapper (gsswrapper.i) is the correct one. For an Android NDK library, this will be the name of your native shared library. You may also need to load the native shared library into your application code manually, as demonstrated by the example NDK application in the <a title="https://github.com/cconlon/kerberos-android-ndk" href="https://github.com/cconlon/kerberos-android-ndk">https://github.com/cconlon/kerberos-android-ndk</a> project.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="5">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">5.</span><span style="width: 5px; " class="inline-block"></span>From your Android NDK project's root directory, run the following command. This will generate all the necessary SWIG interface files.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>swig -java -package edu.mit.jgss.swig -outdir ./src/edu/mit/jgss/swig<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>         -o ./jni/gsswrapper_wrap.c ./jni/gsswrapper.i<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="6">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">6.</span><span style="width: 5px; " class="inline-block"></span>Make sure you have included cross-compiled versions of the necessary MIT Kerberos libraries as well as the Kerberos and CyaSSL header files in your Android NDK project. See the &quot;kerberos-android-ndk&quot; sample app (referenced above) for an example and instructions on how to cross compile the Kerberos libraries. A common place to put these would be in ./jni/libs and ./jni/include, as done in the example Kerberos NDK project.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="7">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">7.</span><span style="width: 5px; " class="inline-block"></span>Add necessary MIT Kerberos libraries and gsswrapper_wrap.c to the Android.mk file as shown in the example Kerberos Android application. This may vary depending on how your project is set up.<br/></p>
</li>
</ol>
<p class="paragraph_style_2">    <br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="8">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">8.</span><span style="width: 5px; " class="inline-block"></span>In your application .java files, add an import for the org.ietf.jgss package:<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>import org.ietf.jgss.*;<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="9">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">9.</span><span style="width: 5px; " class="inline-block"></span>Build and install your NDK application like normal (ndk-build, ant debug, ant debug install, etc.). For more details, please see the README included in the kerberos-android-ndk project. You may also need to push certain configuration and keytab files to your device prior to using the GSS-API layer.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_3">4. Examples<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">To help in understanding how to use this Java GSS-API wrapper in your application or project, there are two sets of client and server examples included in this package. The first one is set of example client/server applications which directly use the raw SWIG, LAYER 1, interface. The second set of client/server examples use the more standardized Java GSS-API (org.ietf.jgss) LAYER 2 interface.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Both sets of example make use of a utility class, Util.java for the LAYER 1 examples and GssUtil.java for the LAYER 2 examples. It is recommended to use the LAYER 2 examples - as they demonstrate programming and API usage that is more common in the Java programming language.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Before running these examples, your krb5.conf file and Kerberos KDC need to be set up correctly to match the principal names you will use in the examples.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">LAYER 1 EXAMPLES<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_14">4.1 Client (examples/client.java)<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The client example expects that the user has already run kinit to receive a TGT for the client principal. The client principal name, server service name, server address, and the server port need to be set to the correct values in client.java before it is compiled.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">When running the client in a desktop environment, after starting the example server (server.java), run:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">./examples/client.sh<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">from the root kerberos-java-gssapi directory. After the client has been started, it will do several things, including:<br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Establish a GSSAPI context with the example server<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Sign, encrypt, and send a message to the server using gss_wrap.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Verify the signature block returned by the server with gss_verify_mic.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="4">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">4.</span><span style="width: 5px; " class="inline-block"></span>Repeat steps (2) and (3) but using gss_seal / gss_verify.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="5">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">5.</span><span style="width: 5px; " class="inline-block"></span>Perform misc. GSSAPI function tests<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_14">4.2 Server (examples/server.java)<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The server example is designed to be run on a standard desktop environment and has been tested on Linux. It is located in server.java and will connect to the example client (client.java). The server and server service name should be modified to the desired values before compiling the example.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">On a desktop environment, after configuring and compiling the server, start it using:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">./examples/server.sh<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">from the root kerberos-java-gssapi directory. Once started, the server will wait for a client connection. When a connection is received, the server will do several things, including:<br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Establish a GSS-API context with the example client<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Receive and unwrap a wrapped message from the client<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Generate and send a signature block for the received message.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_14">LAYER 2 EXAMPLES<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_14">4.3 Client (examples/gssClient.java)<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">For Android, the functionality of this client application has been built into the Android NDK sample application (KerberosAppActivity.java) in the kerberos-android-ndk repository. The client is also provided as a standalone Java example which may be run on standard desktop operating environments.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The client example expects that the user has already run kinit to receive a TGT for the client principal. The client principal name, server service name, server address, and server port need to be set to the correct values in gssClient.java before compilation.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">When running the client in a desktop environment, after starting the example server (gssServer.java), run:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">./examples/gssClient.sh<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">from the kerberos-java-gssapi root directory. After the client has been started, it will do several things, including:<br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Establish a GSSAPI context with the example server.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Sign, encrypt, and send a message to the server.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Verify the signature block returned by the server.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_14">4.4 Server (examples/gssServer.java)<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The server example is designed to be run on a standard desktop environment and has been tested on Linux. It is located in gssServer.java and will connect to either the example GSS-API client (gssClient.java) or the example Kerberos Android NDK application (kerberos-android-ndk). The server service name should be modified to the desired value before compiling and running the example.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">On a desktop environment, after configuring and compiling the server, start it using:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_5">./examples/gssServer.sh<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">from the root kerberos-java-gssapi directory. Once started, the server will do several things, including:<br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Establish a GSS-API context with the example client.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Unwrap a signed and encrypted message that the client sends.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Generate and send a signature block for the received message.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Before starting the example server, there should be an entry in your system keytab for the server service principal.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_3">5. Notes<br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_9"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Because the org.ietf.jgss package already exists on most desktop Java installations, it is necessary to set the bootclasspath variable when running applications built with MIT's org.ietf.jgss package. To see an example of this, please reference the test example scripts in ./examples (ie server.sh, client.sh).<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>When using the bootclasspath, the MIT org.ietf.jgss classes are treated as system classes. All system classes will only lookup shared libraries in $JAVA_HOME/bin. As such, one of several actions needs to be done when using this package with bootclasspath:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_16"><span style="font-size: 12px; " class="Bullet">a.</span><span style="width: 5px; " class="inline-block"></span>Install gsswrapper.so library into $JAVA_HOME/bin<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_16"><span style="font-size: 12px; " class="Bullet">b.</span><span style="width: 5px; " class="inline-block"></span>Set the sun.boot.library.path to include the gsswrapper.so library path. The syntax is:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -45px; " class="full-width">
<p style="text-indent: -45px; " class="paragraph_style_17"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 45px; " class="inline-block"></span>java -Dsun.boot.library.path=$JAVA_HOME/bin:/path/to/gsswrapper.so<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The need to use bootclasspath should not be necessary on Android, as the platform doesn't have an existing org.ietf.jgss package installed.<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>The Layer 2 MIT GSS-API Java implementation does not have support for the SPI framework that is specified in RFC 5653. This framework is specified as optional in the RFC. The current edu.mit.jgss package wraps directly around the Layer 1 SWIG Java GSS-API package (edu.mit.jgss.swig).<br/></p>
</li>
</ol>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_19">6. SWIG Interface Details<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">Note that this section explains the details of the SWIG, LAYER 1 interface. For notes on the Java Bindings (org.ietf.jgss) interface, please refer to Section 7.0 of this document.<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">The SWIG, LAYER 1, Java GSS-API interface functions are located in gsswrapper.java, while there are several separate Java files for each GSS-API structure. Because Java is an object oriented language, the Java GSS-API interface usage differs slightly from the standard MIT GSS-API usage. Java doesn't make use of pointers as the C language does. Because of this, each GSS-API structure has been standardized to a single object in Java, following the naming scheme XXXX_desc, where XXXX is the name of the structure (ex: The Java object for a gss_OID object is gss_OID_desc).<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">For example, in the native MIT GSS-API library, there can be direct structure usage, a pointer to that structure, or a pointer to a pointer. In Java, all of these usages are simplified to a single object. The SWIG wrapper is responsible for converting this object into the correct C form to pass back to the native MIT GSS-API library.<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">In Java, GSS-API functions can be accessed through the gsswrapper.java file like so:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">maj_status = gsswrapper.gss_accept_sec_context(min_status, ...);<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">Because many of the native GSS-API functions return values inside function parameters as OM_uint32 types, you must use a Java array for those parameters. For example, defining the GSS-API min_status variable in Java can be done like so:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">long[] min_status = {0};<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">In this case, the returned min_status value by the gss_accept_sec_context method will be placed into the first element of the Java long[] (min_status[0]).<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_20">6.1.  GSS-API Java Objects<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">GSS-API structures/objects can be created like normal Java objects. For example to create a gss_OID and a gss_cred_id_t object, you would use:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">gss_OID_desc myoid = new gss_OID_desc();<br/></p>
<p class="paragraph_style_18">gss_cred_id_t_desc mycreds = new gss_cred_id_t_desc();<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">A list of GSS-API objects which are available through the Java interface include:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">gss_OID_desc() / gss_OID_desc(String mechanism)<br/></p>
<p class="paragraph_style_18">                 mechanism = optional mech string to initialize the OID with <br/></p>
<p class="paragraph_style_18">                 (ex: &quot;{ 1 2 840 113554 1 2 2}&quot;).<br/></p>
<p class="paragraph_style_18">gss_OID_set_desc()<br/></p>
<p class="paragraph_style_18">gss_buffer_desc() / gss_buffer_desc(String value)<br/></p>
<p class="paragraph_style_18">                 value = optional string to initialize the buffer with.<br/></p>
<p class="paragraph_style_18">gss_channel_bindings_struct()<br/></p>
<p class="paragraph_style_18">gss_cred_id_t_desc()<br/></p>
<p class="paragraph_style_18">gss_ctx_id_t_desc()<br/></p>
<p class="paragraph_style_18">gss_name_t_desc()<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_20">6.2 GSS-API Constants<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">All GSS-API constants, including calling errors, routine errors, supplementary info bits, etc, are located in the gsswrapperConstants.java file. If your application code implements this file, the constants can be used directly. For example, if a Java class implements gsswrapperConstants:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">public class myClass implements gsswrapperConstants<br/></p>
<p class="paragraph_style_18">{<br/></p>
<p class="paragraph_style_18">    ...<br/></p>
<p class="paragraph_style_18">}<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">Then the constants can be used directly inside of that class:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">if (maj_status != GSS_S_COMPLETE) { ... }<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_20">6.3 Status Code Macros<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">GSS-API macros that test status codes for error conditions are located in gsswrapper.java. Specific details can be seen in either gsswrapper.java or gsswrapper.i. The macros included are:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">GSS_CALLING_ERROR<br/></p>
<p class="paragraph_style_18">GSS_ROUTINE_ERROR<br/></p>
<p class="paragraph_style_18">GSS_SUPPLEMENTARY_INFO<br/></p>
<p class="paragraph_style_18">GSS_ERROR<br/></p>
<p class="paragraph_style_18">GSS_CALLING_ERROR_FIELD<br/></p>
<p class="paragraph_style_18">GSS_ROUTINE_ERROR_FIELD<br/></p>
<p class="paragraph_style_18">GSS_SUPPLEMENTARY_INFO_FIELD<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_20">6.4 Helper Functions<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">[ gss_display_status_wrap ]<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">This method has been included in the GSS-API Java interface to provide a wrapper around the standard GSS-API gss_display_status function. It is needed because Java passes in a long for min_status instead of a pointer to an OM_uint32. The Java prototype for this method is:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">public static long gss_display_status_wrap(<br/></p>
<p class="paragraph_style_18">        long min_status,<br/></p>
<p class="paragraph_style_18">        long status_value,<br/></p>
<p class="paragraph_style_18">        int status_type,<br/></p>
<p class="paragraph_style_18">        gss_OID_desc mech_type,<br/></p>
<p class="paragraph_style_18">        long[] message_context,<br/></p>
<p class="paragraph_style_18">        gss_buffer_desc status_string);<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">[ getDescArray ]<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">This method allows the easy retrieval of gss_buffer_t value by Java. In the example Kerberos Android application it is used to get the value of an outputToken (gss_buffer_desc) as a Java byte[] to send across the network. The Java prototype for this method is:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">public static byte[] getDescArray(gss_buffer_desc buffer);<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">[ setDescArray ]<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">This method allows the value of a gss_buffer_t object to be set from Java using a Java byte[] as input. In the example Kerberos Android application, it is used to set the value of an inputToken after it has been received as a byte[] from the example server. The Java prototype for this method is:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">public static int setDescArray(gss_buffer_desc buffer, byte[] javaArray);<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_20">6.5 Structure Extensions<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">[ gss_OID_set_desc.getElement ]<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">This method is used to get a specific member of a gss_OID_set_desc object. It takes an offset as input and returns a gss_OID_desc object. The Java prototype is:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">public gss_OID_desc getElement(int offset);<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">[ gss_OID_desc.equals ]<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">This is a comparison function for a gss_OID_desc and input mech string. It returns 1 if the two are equal, otherwise 0. The Java prototype is:<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">public int equals(String mechString_in);<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_20">6.6 GSS-API Methods<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">The following standard GSS-API functions are included in the Java GSS-API interface. For documentation regarding each individual function, please reference standard GSS-API documentation.<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">gss_acquire_cred<br/></p>
<p class="paragraph_style_18">gss_release_cred<br/></p>
<p class="paragraph_style_18">gss_init_sec_context<br/></p>
<p class="paragraph_style_18">gss_accept_sec_context<br/></p>
<p class="paragraph_style_18">gss_process_context_token<br/></p>
<p class="paragraph_style_18">gss_delete_sec_context<br/></p>
<p class="paragraph_style_18">gss_context_time<br/></p>
<p class="paragraph_style_18">gss_get_mic<br/></p>
<p class="paragraph_style_18">gss_verify_mic<br/></p>
<p class="paragraph_style_18">gss_wrap<br/></p>
<p class="paragraph_style_18">gss_unwrap<br/></p>
<p class="paragraph_style_18">gss_display_status (wrapped as gss_display_status_wrap)<br/></p>
<p class="paragraph_style_18">gss_indicate_mechs<br/></p>
<p class="paragraph_style_18">gss_compare_name<br/></p>
<p class="paragraph_style_18">gss_display_name<br/></p>
<p class="paragraph_style_18">gss_import_name<br/></p>
<p class="paragraph_style_18">gss_release_name<br/></p>
<p class="paragraph_style_18">gss_release_buffer<br/></p>
<p class="paragraph_style_18">gss_release_oid_set<br/></p>
<p class="paragraph_style_18">gss_inquire_cred<br/></p>
<p class="paragraph_style_18">gss_inquire_context<br/></p>
<p class="paragraph_style_18">gss_wrap_size_limit<br/></p>
<p class="paragraph_style_18">gss_add_cred<br/></p>
<p class="paragraph_style_18">gss_inquire_cred_by_mech<br/></p>
<p class="paragraph_style_18">gss_export_sec_context<br/></p>
<p class="paragraph_style_18">gss_import_sec_context<br/></p>
<p class="paragraph_style_18">gss_release_oid<br/></p>
<p class="paragraph_style_18">gss_create_empty_oid_set<br/></p>
<p class="paragraph_style_18">gss_add_oid_set_member<br/></p>
<p class="paragraph_style_18">gss_test_oid_set_member<br/></p>
<p class="paragraph_style_18">gss_str_to_oid<br/></p>
<p class="paragraph_style_18">gss_oid_to_str<br/></p>
<p class="paragraph_style_18">gss_inquire_names_for_mech<br/></p>
<p class="paragraph_style_18">gss_inquire_mechs_for_name<br/></p>
<p class="paragraph_style_18">gss_sign<br/></p>
<p class="paragraph_style_18">gss_verify<br/></p>
<p class="paragraph_style_18">gss_seal<br/></p>
<p class="paragraph_style_18">gss_unseal<br/></p>
<p class="paragraph_style_18">gss_export_name<br/></p>
<p class="paragraph_style_18">gss_duplicate_name<br/></p>
<p class="paragraph_style_18">gss_canonicalize_name<br/></p>
<p class="paragraph_style_18">gss_pseudo_random<br/></p>
<p class="paragraph_style_18">gss_store_cred<br/></p>
<p class="paragraph_style_18">gss_set_neg_mechs<br/></p>
<p class="paragraph_style_18">gss_indicate_mechs_by_attrs<br/></p>
<p class="paragraph_style_18">gss_inquire_attrs_for_mechs<br/></p>
<p class="paragraph_style_18">gss_display_mech_attr<br/></p>
<p class="paragraph_style_18">gss_inquire_saslname_for_mech<br/></p>
<p class="paragraph_style_18">gss_inquire_mech_for_saslname<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_21">7. Java GSS-API Details (org.ietf.jgss)<br/></p>
<p class="paragraph_style_22"><br/></p>
<p class="paragraph_style_22">The LAYER 2 Java GSS-API interface was designed to make it easier for Java developers to use the native MIT GSS-API library. The GSS-API interface conforms to the org.ietf.jgss package outlined in RFC 5653. There are a few things to take note of - please see section 5.0 of this document for more details.<br/></p>
<p class="paragraph_style_22"><br/></p>
<p class="paragraph_style_22">As the org.ietf.jgss interface is fairly well documented, there isn't extensive API documentation located in this document. Please refer to standard Java GSS-API org.ietf.jgss documentation such as the Oracle, OpenJDK, or Apache Harmony documentation.<br/></p>
<p class="paragraph_style_22"><br/></p>
<p class="paragraph_style_21">8. License<br/></p>
<p class="paragraph_style_22"><br/></p>
<p class="paragraph_style_22">* Copyright (C) 2012 by the Massachusetts Institute of Technology.<br/></p>
<p class="paragraph_style_22"> * All rights reserved.<br/></p>
<p class="paragraph_style_22"> *<br/></p>
<p class="paragraph_style_22"> * Redistribution and use in source and binary forms, with or without<br/></p>
<p class="paragraph_style_22"> * modification, are permitted provided that the following conditions<br/></p>
<p class="paragraph_style_22"> * are met:<br/></p>
<p class="paragraph_style_22"> *<br/></p>
<p class="paragraph_style_22"> * * Redistributions of source code must retain the above copyright<br/></p>
<p class="paragraph_style_22"> *   notice, this list of conditions and the following disclaimer.<br/></p>
<p class="paragraph_style_22"> *<br/></p>
<p class="paragraph_style_22"> * * Redistributions in binary form must reproduce the above copyright<br/></p>
<p class="paragraph_style_22"> *   notice, this list of conditions and the following disclaimer in<br/></p>
<p class="paragraph_style_22"> *   the documentation and/or other materials provided with the<br/></p>
<p class="paragraph_style_22"> *   distribution.<br/></p>
<p class="paragraph_style_22"> *<br/></p>
<p class="paragraph_style_22"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS<br/></p>
<p class="paragraph_style_22"> * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT<br/></p>
<p class="paragraph_style_22"> * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS<br/></p>
<p class="paragraph_style_22"> * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br/></p>
<p class="paragraph_style_22"> * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,<br/></p>
<p class="paragraph_style_22"> * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES<br/></p>
<p class="paragraph_style_22"> * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR<br/></p>
<p class="paragraph_style_22"> * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)<br/></p>
<p class="paragraph_style_22"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,<br/></p>
<p class="paragraph_style_22"> * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)<br/></p>
<p class="paragraph_style_22"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED<br/></p>
<ol>
<li style="line-height: 15px; padding-left: 8px; text-indent: -8px; " class="full-width">
<p style="text-indent: -8px; " class="paragraph_style_23"><span style="font-size: 12px; " class="Bullet">*</span><span style="width: 3px; " class="inline-block"></span>OF THE POSSIBILITY OF SUCH DAMAGE.<br/></p>
</li>
</ol>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_19">9. Support<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">If you have any questions or comments, please post to the krbdev mailing list (<a title="http://web.mit.edu/kerberos/mail-lists.html" href="http://web.mit.edu/kerberos/mail-lists.html">http://web.mit.edu/kerberos/mail-lists.html</a>) or contact <a title="mailto:support@wolfssl.com" href="https://www.wolfssl.com/cdn-cgi/l/email-protection#c0b3b5b0b0afb2b480b7afaca6b3b3aceea3afad"><span class="__cf_email__" data-cfemail="a1d2d4d1d1ced3d5e1d6cecdc7d2d2cd8fc2cecc">[email&#160;protected]</span><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></a>.<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_19">10. Reference<br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">MIT Kerberos: <a title="http://web.mit.edu/kerberos/" href="http://web.mit.edu/kerberos/">http://web.mit.edu/kerberos/</a><br/></p>
<p class="paragraph_style_18">wolfSSL: <a title="http://www.wolfssl.com/" href="http://www.wolfssl.com/">http://www.wolfssl.com/</a><br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">Kerberos Java GSS-API Wrapper: <a title="https://github.com/cconlon/kerberos-java-gssapi" href="https://github.com/cconlon/kerberos-java-gssapi">https://github.com/cconlon/kerberos-java-gssapi</a><br/></p>
<p class="paragraph_style_18">Example GSS-API Android NDK App: <a title="https://github.com/cconlon/kerberos-android-ndk" href="https://github.com/cconlon/kerberos-android-ndk">https://github.com/cconlon/kerberos-android-ndk</a><br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18">RFC 5653:  <a title="http://tools.ietf.org/html/rfc5653" href="http://tools.ietf.org/html/rfc5653">http://tools.ietf.org/html/rfc5653</a><br/></p>
<p class="paragraph_style_18"><br/></p>
<p class="paragraph_style_18"><br/></p>
<p style="padding-bottom: 0pt; " class="paragraph_style_24">Copyright 2017 wolfSSL Inc.  All rights reserved.</p>
</div>
</div>
</div>
<div id="id3" style="height: 26px; left: 193px; position: absolute; top: 122px; width: 268px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_268_26" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_25"><a class="class1" title="Docs.html" href="Docs.html">Docs</a> <span class="style_2">-&gt;</span> <span class="style_3">MIT Kerberos: Java GSS-API Wrapper</span></p>
</div>
</div>
</div>
<div style="height: 1px; width: 698px;  height: 1px; left: 37px; position: absolute; top: 230px; width: 698px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 698px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_1.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 698px; "/>
</div>
</div>
<div style="height: 37px; width: 545px;  height: 37px; left: 191px; position: absolute; top: 80px; width: 545px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 545px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_2.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 545px; "/>
</div>
</div>
<div id="id4" style="height: 25px; left: 200px; position: absolute; top: 84px; width: 43px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_43_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_26"><a class="class2" title="Home.html" href="Home.html">Home</a></p>
</div>
</div>
</div>
<div id="id5" style="height: 25px; left: 365px; position: absolute; top: 84px; width: 72px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_72_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_27"><a class="class3" title="https://wolfssl.com/wolfSSL/download/downloadForm.php" href="https://wolfssl.com/wolfSSL/download/downloadForm.php">Download</a></p>
</div>
</div>
</div>
<div id="id6" style="height: 25px; left: 439px; position: absolute; top: 84px; width: 59px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_59_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_27"><a class="class4" title="License.html" href="License.html">License</a></p>
</div>
</div>
</div>
<div id="id7" style="height: 25px; left: 499px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_27"><a class="class5" title="Blog/Blog.html" href="Blog/Blog.html">Blog</a></p>
</div>
</div>
</div>
<div id="id8" style="height: 25px; left: 589px; position: absolute; top: 84px; width: 80px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_80_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_27"><a class="class6" title="Community.html" href="Community.html">Community</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 245px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_3.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 296px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_4.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 363px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_5.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 438px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_6.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 498px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_7.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 589px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_8.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id9" style="height: 25px; left: 671px; position: absolute; top: 84px; width: 61px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_61_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_27"><a class="class7" title="Contact.html" href="Contact.html">Contact</a></p>
</div>
</div>
</div>
<div id="id10" style="height: 25px; left: 249px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_26"><a class="class8" title="About.html" href="About.html">About</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 670px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_9.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id11" style="height: 25px; left: 298px; position: absolute; top: 84px; width: 63px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_63_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_27"><a class="class9" title="Products.html" href="Products.html">Products</a></p>
</div>
</div>
</div>
<div id="id12" style="height: 25px; left: 549px; position: absolute; top: 84px; width: 41px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_41_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_26"><a class="class10" title="Docs.html" href="Docs.html">Docs</a></p>
</div>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 545px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_10.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id13" style="height: 27px; left: 59px; position: absolute; top: 200px; width: 196px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_196_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_28"><a class="class11" title="http://www.yassl.com/documentation/kerberos/kerberos_java_gssapi_wrapper.pdf" href="http://www.yassl.com/documentation/kerberos/kerberos_java_gssapi_wrapper.pdf">Download PDF</a></p>
</div>
</div>
</div>
<div style="height: 22px; width: 22px;  height: 22px; left: 33px; position: absolute; top: 201px; width: 22px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-kerberos-android-gssapi_files/PDF.png" alt="" style="border: none; height: 22px; width: 22px; "/>
</div>
<div style="height: 16px; width: 20px;  height: 16px; left: 706px; position: absolute; top: 51px; width: 20px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 20px; ">
<img src="Docs-kerberos-android-gssapi_files/shapeimage_11.png" alt="" style="height: 16px; left: 0px; position: absolute; top: 0px; width: 20px; "/>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 707px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-kerberos-android-gssapi_files/United%20Kingdom(Great%20Britain).png" alt="" style="border: none; height: 19px; width: 19px; "/>
</div>
<div id="id14" style="height: 23px; left: 328px; position: absolute; top: 48px; width: 258px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_258_23" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_29">Questions? +1 (425) 245-8247</p>
</div>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 685px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="http://www.wolfssl.jp/" title="http://www.wolfssl.jp"><img src="Docs-kerberos-android-gssapi_files/japan.png" alt="" style="border: none; height: 19px; width: 19px; "/></a>
</div>
<div id="id15" style="height: 28px; left: 593px; position: absolute; top: 44px; width: 119px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_119_28" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_30"><a class="class12" title="https://www.wolfssl.com/forums" href="https://www.wolfssl.com/forums">Support <span class="style_4">Forums</span></a></p>
</div>
</div>
</div>
<div style="height: 121px; width: 155px;  height: 121px; left: 32px; position: absolute; top: 5px; width: 155px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="Home.html" title="Home.html"><img src="Docs-kerberos-android-gssapi_files/wolfssl_logo.png" alt="" style="border: none; height: 121px; width: 156px; "/></a>
</div>
<div style="height: 8594px; line-height: 8594px; " class="spacer"> </div>
</div>
<div style="height: 100px; margin-left: 0px; position: relative; width: 770px; z-index: 15; " id="footer_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
</div>
</div>
</div>
 <script type="text/javascript">/* <![CDATA[ */(function(d,s,a,i,j,r,l,m,t){try{l=d.getElementsByTagName('a');t=d.createElement('textarea');for(i=0;l.length-i;i++){try{a=l[i].href;s=a.indexOf('/cdn-cgi/l/email-protection');m=a.length;if(a&&s>-1&&m>28){j=28+s;s='';if(j<m){r='0x'+a.substr(j,2)|0;for(j+=2;j<m&&a.charAt(j)!='X';j+=2)s+='%'+('0'+('0x'+a.substr(j,2)^r).toString(16)).slice(-2);j++;s=decodeURIComponent(s)+a.substr(j,m-j)}t.innerHTML=s.replace(/</g,'&lt;').replace(/>/g,'&gt;');l[i].href='mailto:'+t.value}}catch(e){}}}catch(e){}})(document);/* ]]> */</script></body>

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-kerberos-android-gssapi.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:24:43 GMT -->
</html>
